<!DOCTYPE html>
<html lang="en">
<head>
    <meta  http-equiv="content-type" content="text/html" charset="utf-8"/>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
            //Array each方法
        var arr = [1,2,3,[4,[5]]];
            //ECMA5 中的forEach  :只适合遍历一维数组
            /*
        arr.forEach(function(item,index,array){
                alert(item);
        })*/


            /**
             * 实现Array each 能遍历多维数组
             *
             * 特别注意本例子写代码思路：先将架子写完，严谨的判断，填写逻辑代码
             */

            var arr = [1,2,3,[4,[5,[6]]]];
        Array.prototype.each = function(fn){
            try{
                this.i || (this.i=0);//记录当前遍历元素的位置，此处用this.i很严谨，否则可能跟内层数组冲突
                //严谨判断什么时候走each核心方法:数组长度>0且参数是函数
                if(this.length>0 && fn.constructor == Function){
                    //循环遍历数组的每一项  底层最好不用for in 循环，因为i可能会冲突
                    while (this.i<this.length){
                        //获取数组的每一项
                        var e = this[this.i];
                        //如果当前元素获取到了，且当前元素是一个数组，直接做递归操作
                        if(e && e.constructor == Array){
                            e.each(fn);
                        }else{
                            //如果不是数组，则是单个元素，则执行fn
                            fn.apply(e,[e]);//或者fn.call(e,e);
                        }
                        this.i++;
                    }
                    this.i = null;//释放内存
                }
            }catch (ex){
                //do something
            }
            return this;
        }

        arr.each(function(item){
            alert(item);
        });
    </script>
</head>
<body>

</body>
</html>